home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 011 / brutil.arc / KEYSCAN.ASM < prev    next >
Assembly Source File  |  1987-02-13  |  2KB  |  126 lines

  1. CODE    SEGMENT    PARA PUBLIC
  2.     ASSUME    CS:CODE,DS:CODE,ES:CODE
  3.     ORG    100H
  4. START    PROC    NEAR
  5.     JMP    SHORT INIT
  6. BUFFER    DB    100 DUP(0)
  7. BUFEND    LABEL    BYTE
  8. BUFLEN    EQU    OFFSET(BUFEND-BUFFER)
  9. BUFPTR1    DW    0
  10. BUFPTR2    DW    0
  11. INIT:    MOV    SI,36
  12.     MOV    DI,OFFSET OLDINT
  13.     MOV    AX,0
  14.     MOV    DS,AX
  15.     MOVSW
  16.     MOVSW
  17.     PUSH    DS
  18.     PUSH    ES
  19.     POP    DS
  20.     POP    ES
  21.     MOV    DI,36
  22.     CLI
  23.     MOV    AX,OFFSET KBINT
  24.     STOSW
  25.     MOV    AX,CS
  26.     STOSW
  27.     STI
  28.     PUSH    DS
  29.     POP    ES
  30.     MOV    AH,9
  31.     MOV    DX,OFFSET EXTMSG
  32.     INT    21H
  33. REPEAT: CALL    KBGET
  34.     CMP    AL,1
  35.     JNZ    REPEAT
  36.     CALL    KBGET
  37.     CMP    AL,1
  38.     JNZ    REPEAT
  39. REPEAT2:    CALL    KBGET
  40.     CMP    AL,81H
  41.     JNZ    REPEAT2
  42.     MOV    SI,OFFSET OLDINT
  43.     MOV    DI,36
  44.     MOV    AX,0
  45.     MOV    ES,AX
  46.     CLI
  47.     MOVSW
  48.     MOVSW
  49.     STI
  50.     PUSH    DS
  51.     POP    ES
  52.     RET
  53. OLDINT    DD    0
  54. EXTMSG: DB    'Hold down ESC key to end program',13,10,'$'
  55. KBGET:    CLI
  56.     MOV    BX,BUFPTR1
  57.     CMP    BX,BUFPTR2
  58.     JNZ    KBGET2
  59.     STI
  60.     JMP    KBGET
  61. KBGET2:    MOV    AL,[BUFFER+BX]
  62.     INC    BX
  63.     CMP    BX,BUFLEN
  64.     JC    KBGET3
  65.     SUB    BX,BX
  66. KBGET3:    MOV    BUFPTR1,BX
  67.     STI
  68.     PUSH    AX
  69.     MOV    CL,4
  70.     SHR    AL,CL
  71.     CALL    HEX1
  72.     POP    AX
  73.     PUSH    AX
  74.     AND    AL,15
  75.     CALL    HEX1
  76.     POP    AX
  77. CRLF:    PUSH    AX
  78.     MOV    DL,13
  79.     CALL    HEX2
  80.     POP    AX
  81.     RET
  82. HEX1:    ADD    AL,90H
  83.     DAA
  84.     ADC    AL,40H
  85.     DAA
  86.     MOV    DL,AL
  87. HEX2:    MOV    AH,2
  88.     INT    21H
  89.     RET
  90.     ASSUME    DS:NOTHING
  91. KBINT:    PUSH    BX
  92.     PUSH    AX
  93.     IN    AL,60H
  94.     PUSH    AX
  95.     IN    AL,61H
  96.     OR    AL,80H
  97.     OUT    61H,AL
  98.     AND    AL,7FH
  99.     OUT    61H,AL
  100.     POP    AX
  101.     MOV    BX,BUFPTR2
  102.     MOV    [BUFFER+BX],AL
  103.     INC    BX
  104.     CMP    BX,BUFLEN
  105.     JC    KBINT3
  106.     SUB    BX,BX
  107. KBINT3:    CMP    BX,BUFPTR1
  108.     JZ    KBINT2
  109.     MOV    BUFPTR2,BX
  110. KBINT2:    MOV    AL,20H
  111.     OUT    20H,AL
  112.     POP    AX
  113.     POP    BX
  114.     IRET
  115. START    ENDP
  116.     CODE    ENDS
  117.     END    START
  118. R1
  119.     JZ    KBINT2
  120.     MOV    BUFPTR2,BX
  121. KBINT2:    MOV    AL,20H
  122.     OUT    20H,AL
  123.     POP    AX
  124.     POP    BX
  125.     IRET
  126. START